//
// C++ Implementation: sqlitedb
//
// Description:
//
//
// Author: Joker,,,, <joker@ubunter>, (C) 2012
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include <sqlitedb.h>

SqliteDB::SqliteDB() {

    sdb = QSqlDatabase::addDatabase("QSQLITE");
    sdb.setDatabaseName("./translate2.sqlite");
    if (!sdb.open()) {
        qDebug() << sdb.lastError().text();
        return;
    }

}

SqliteDB::~SqliteDB() {
}

void SqliteDB::setString(QStringList words, int state){
        QString query_text="INSERT INTO \"translate\"";
        QString value_query=" (";
        if(state&ABBR)
        value_query+="Abbr, ";
        if(state&WORD)
        value_query+="Words, ";
        if(state&TRANSL)
        value_query+="Transl";
        if(state&EXCEP)
        value_query+=", exception";
        if(state&FREQ)
        value_query+=", link";
 value_query+=")";
 QString val_query=" VALUES ('";
val_query+=words.join("', '");
val_query+="');";
query_text+=value_query;
query_text+=val_query;
   QSqlQuery query=sdb.exec(query_text);
   if(query.lastError().type()==QSqlError::NoError)
        return;
   else{
       qDebug() <<"ОШИБКО!!!!!!!! " <<query.lastError().text();
       qDebug()<<query_text;
       qDebug()<<"size: "<<words.size()<<" state: "<<state;
       qDebug()<<"---------------------------------------------------------";
   }
}

QString SqliteDB::getResultString(QString table_name, QString column_name,QString where_clause) {
    QString query_text="SELECT "+column_name+" FROM "+table_name;
    if (where_clause!="")
        query_text+=" WHERE "+where_clause;
qDebug()<<query_text;
    QSqlQuery query=sdb.exec(query_text);
    if (query.lastError().type()!=QSqlError::NoError) {
        qDebug() << query.lastError().text();
        return QString("");
    }
    QString result;
    while (query.next()) {
        result=query.value(0).toString();
    }
    return result;
}

QStringList SqliteDB::getResultTransl(QString table_name, QString where_clause) {
    QString query_text="SELECT * FROM "+table_name;
    if (where_clause!="")
        query_text+=" WHERE "+where_clause;
    qDebug()<<query_text;
    QSqlQuery query=sdb.exec(query_text);
    if (query.lastError().type()!=QSqlError::NoError) {
        qDebug() << query.lastError().text();
        return QStringList("");
    }
    QStringList result;
    QString tmp_result;
    int state=0;
    qDebug()<<"size query"<<query.size();
    while (query.next()) {
        //result<<query.value(0).toString();
            if(!query.value(1).isNull()){
            state+=ABBR;
        tmp_result+=query.value(1).toString();
        tmp_result+="#";
    }
         state+=WORD;
         tmp_result+=query.value(2).toString();
         tmp_result+="#";
         state+=TRANSL;
         tmp_result+=query.value(3).toString();
         tmp_result+="#";
            if(!query.value(4).isNull()){
            state+=EXCEP;
            tmp_result+=query.value(4).toString();
            tmp_result+="#";
        }
            if(!query.value(5).isNull()){
            state+=FREQ;
            tmp_result+=query.value(5).toString();
            tmp_result+="#";
        }
            tmp_result=QString::number(state)+"#"+tmp_result;
            tmp_result = tmp_result.left(tmp_result.size()-1);//убираем крайнюю решетку
            result<<tmp_result;
            qDebug()<<tmp_result;
            qDebug()<<"\n";
            tmp_result="";
            state=0;
    }

    //собираем все в одну строку с каким нить разделителем типа # , потом  в QStringList, отправляем, а там строки разбиваем в соотвествии с разделителем и состоянием
    return result;
    }

QStringList SqliteDB::getResult(QString table_name, QString column_name,QString where_clause) {
    QString query_text="SELECT DISTINCT "+column_name+" FROM "+table_name;
    if (where_clause!="")
        query_text+=" WHERE "+where_clause;
    qDebug()<<query_text;
    QSqlQuery query=sdb.exec(query_text);
    if (query.lastError().type()!=QSqlError::NoError) {
        qDebug() << query.lastError().text();
        return QStringList("");
    }
    QStringList result;
    while (query.next()) {
        result<<query.value(0).toString();
    }
    return result;
}
